# -*- coding: UTF-8 -*-
# @Time : 2022-02-05 2:06
# @User：My.
# @File : ExcelUtil.py
# 定义类
# 类初始化，读取文件，文件参数，文件验证
# 创建workbook
# 读取sheet，（索引，名称）两种方式
# 读取sheet里面的数据
# 执行方法
import os
import xlrd


# 自定义异常类
class SheetTypeError:
    pass


class ExcelReader:
    def __init__(self, excel_file, sheet_by):
        # 判断文件是否存在，不存在抛出异常
        if os.path.exists(excel_file):
            self.excel_file = excel_file
            self.sheet_by = sheet_by
            self._data = list()
        else:
            raise FileNotFoundError('文件不存在')

    def data(self):
        global sheet
        if not self._data:
            # 创建workbook
            workbook = xlrd.open_workbook(self.excel_file)
            # 读取sheet，索引或者名称
            if type(self.sheet_by) not in [str, int]:
                raise SheetTypeError('请输入int或者str类型')
            elif isinstance(self.sheet_by, int):
                sheet = workbook.sheet_by_index(self.sheet_by)
            elif isinstance(self.sheet_by, str):
                sheet = workbook.sheet_by_name(self.sheet_by)
            # 读取sheet数据
            # 数据返回list[{字典},{字典}]
            # 获取首行数据
            title = sheet.row_values(0)
            # 循环获取第一行之后所有行数据
            # data = []
            for row in range(1, sheet.nrows):
                row_value = sheet.row_values(row)
                # 首行和遍历数据拼接字典
                self._data.append(dict(zip(title, row_value)))
        return self._data


if __name__ == '__main__':
    reader = ExcelReader("../TestData/TestData.xlsx", 'TestCases')
    print(reader.data())
    pass